const api = require('../../utils/api');

Page({
  data: {
    // 食物数据
    food: {
      name: '',
      category: '其他',
      calories: '',
      carbs: '',
      protein: '',
      fat: '',
      baseAmount: '100',
      baseUnit: '克'
    },
    
    // 分类选择
    categories: ['全部', '主食', '蔬菜', '水果', '肉类', '水产', '蛋奶', '豆制品', '坚果', '零食', '饮料', '其他'],
    categoryIndex: 11, // 默认"其他"
    categoryIcons: {
      '主食': '🍚',
      '蔬菜': '🥦',
      '水果': '🍎',
      '肉类': '🍗',
      '水产': '🐟',
      '蛋奶': '🥚',
      '豆制品': '🫘',
      '坚果': '🥜',
      '零食': '🍫',
      '饮料': '🥤',
      '其他': '🍴'
    },
    
    // 单位选择
    unitOptions: ['份', '克', '个', '杯', '勺'],
    baseUnitIndex: 1, // 默认"克"
    
    // UI状态管理
    isSaving: false,
    hasChanged: false,
  },
  
  onLoad(options) {
    // 从URL参数中获取预填充的食物名称
    if (options.keyword) {
      const keyword = decodeURIComponent(options.keyword);
      this.setData({
        'food.name': keyword,
        hasChanged: true
      });
      
      // 尝试通过API搜索该关键词获取营养数据
      this.tryGetNutritionByKeyword(keyword);
    }
    
    // 获取食物分类
    this.loadFoodCategories();
  },
  
  // 尝试通过关键词获取营养数据
  async tryGetNutritionByKeyword(keyword) {
    if (!keyword || keyword.length < 2) return;
    
    wx.showLoading({
      title: '获取食物数据...',
      mask: true
    });
    
    try {
      const result = await api.diet.searchTianapiFood(keyword, 0, 1);
      
      if (result && result.success && result.data && result.data.length > 0) {
        const foodData = result.data[0];
        
        // 找到对应的分类索引
        let categoryIndex = 11; // 默认"其他"
        if (foodData.category) {
          const index = this.data.categories.findIndex(c => c === foodData.category);
          if (index !== -1) {
            categoryIndex = index;
          }
        }
        
        this.setData({
          'food.calories': foodData.calories.toString(),
          'food.carbs': foodData.carbs ? foodData.carbs.toString() : '',
          'food.protein': foodData.protein ? foodData.protein.toString() : '',
          'food.fat': foodData.fat ? foodData.fat.toString() : '',
          categoryIndex
        });
        
        wx.showToast({
          title: '已填充营养数据',
          icon: 'success'
        });
      }
    } catch (error) {
      console.error('获取食物营养数据失败:', error);
    } finally {
      wx.hideLoading();
    }
  },
  
  // 加载食物分类
  async loadFoodCategories() {
    try {
      const result = await api.diet.getFoodCategories();
      if (result && result.success && result.data && result.data.length > 0) {
        // 保留第一项"全部"，合并后端返回的分类
        const categories = ['全部', ...result.data];
        
        this.setData({
          categories
        });
      }
    } catch (error) {
      console.error('加载食物分类失败:', error);
    }
  },
  
  // 返回上一页
  onBack() {
    // 如果有未保存的修改，提示用户
    if (this.data.hasChanged) {
      wx.showModal({
        title: '提示',
        content: '您有未保存的修改，确定要返回吗？',
        confirmText: '返回',
        cancelText: '继续编辑',
        success: (res) => {
          if (res.confirm) {
            wx.navigateBack();
          }
        }
      });
    } else {
      wx.navigateBack();
    }
  },
  
  // 处理食物名称输入
  onNameInput(e) {
    this.setData({
      'food.name': e.detail.value,
      hasChanged: true
    });
  },
  
  // 处理食物分类选择
  onCategoryChange(e) {
    const index = parseInt(e.detail.value);
    this.setData({
      categoryIndex: index,
      'food.category': this.data.categories[index],
      hasChanged: true
    });
  },
  
  // 处理热量输入
  onCaloriesInput(e) {
    this.setData({
      'food.calories': e.detail.value,
      hasChanged: true
    });
  },
  
  // 处理碳水输入
  onCarbsInput(e) {
    this.setData({
      'food.carbs': e.detail.value,
      hasChanged: true
    });
  },
  
  // 处理蛋白质输入
  onProteinInput(e) {
    this.setData({
      'food.protein': e.detail.value,
      hasChanged: true
    });
  },
  
  // 处理脂肪输入
  onFatInput(e) {
    this.setData({
      'food.fat': e.detail.value,
      hasChanged: true
    });
  },
  
  // 处理基准量输入
  onBaseAmountInput(e) {
    this.setData({
      'food.baseAmount': e.detail.value,
      hasChanged: true
    });
  },
  
  // 处理基准单位选择
  onBaseUnitChange(e) {
    const index = parseInt(e.detail.value);
    this.setData({
      baseUnitIndex: index,
      'food.baseUnit': this.data.unitOptions[index],
      hasChanged: true
    });
  },
  
  // 表单验证
  validateForm() {
    const { food } = this.data;
    
    if (!food.name.trim()) {
      wx.showToast({
        title: '请输入食物名称',
        icon: 'none'
      });
      return false;
    }
    
    if (!food.calories || isNaN(parseFloat(food.calories))) {
      wx.showToast({
        title: '请输入有效的热量值',
        icon: 'none'
      });
      return false;
    }
    
    // 检查营养值是否都是有效数字
    if (food.carbs && isNaN(parseFloat(food.carbs))) {
      wx.showToast({
        title: '请输入有效的碳水值',
        icon: 'none'
      });
      return false;
    }
    
    if (food.protein && isNaN(parseFloat(food.protein))) {
      wx.showToast({
        title: '请输入有效的蛋白质值',
        icon: 'none'
      });
      return false;
    }
    
    if (food.fat && isNaN(parseFloat(food.fat))) {
      wx.showToast({
        title: '请输入有效的脂肪值',
        icon: 'none'
      });
      return false;
    }
    
    if (!food.baseAmount || isNaN(parseFloat(food.baseAmount)) || parseFloat(food.baseAmount) <= 0) {
      wx.showToast({
        title: '请输入有效的基准量',
        icon: 'none'
      });
      return false;
    }
    
    return true;
  },
  
  // 保存食物并返回
  saveFood() {
    if (this.data.isSaving) return; // 防止重复点击
    
    if (!this.validateForm()) return;
    
    this.setData({ isSaving: true });
    
    const food = {
      ...this.data.food,
      calories: parseFloat(this.data.food.calories) || 0,
      carbs: parseFloat(this.data.food.carbs) || 0,
      protein: parseFloat(this.data.food.protein) || 0,
      fat: parseFloat(this.data.food.fat) || 0,
      baseAmount: parseFloat(this.data.food.baseAmount) || 100,
      id: `custom_${Date.now()}`, // 生成临时ID
      isCustom: true
    };
    
    // 将自定义食物数据返回上一页
    const pages = getCurrentPages();
    const prevPage = pages[pages.length - 2]; // 获取上一个页面
    
    // 处理前一个页面的数据
    if (prevPage && prevPage.route === 'pages/dietAdd/dietAdd') {
      // 添加到食物列表
      const foods = [...(prevPage.data.foods || [])];
      foods.push({
        ...food,
        quantity: 1, // 默认添加一份
        unit: food.baseUnit
      });
      
      prevPage.setData({ 
        foods,
        showFoodSearch: false // 关闭搜索框
      });
      
      // 更新营养总计
      if (typeof prevPage.updateNutritionTotals === 'function') {
        prevPage.updateNutritionTotals();
      }
      
      // 显示提示
      wx.showToast({
        title: '已添加到餐食',
        icon: 'success',
        duration: 1500,
        mask: true
      });
      
      setTimeout(() => {
        this.setData({ isSaving: false });
        wx.navigateBack();
      }, 1500);
    } else {
      // 如果不是从dietAdd页面过来的，只保存到本地后返回
      wx.setStorageSync('lastCustomFood', food);
      wx.showToast({
        title: '食物已保存',
        icon: 'success'
      });
      
      setTimeout(() => {
        this.setData({ isSaving: false });
        wx.navigateBack();
      }, 1500);
    }
  }
}); 